#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
pid_t pid=-1;

void signal_go(int sig){
    kill(getppid(),SIGUSR1);
    return;
}

void signal_quit(int sig){
    kill(getppid(),SIGUSR2);
    return;
}

void signal_leave(int sig){
    printf("please get off the car\n");
    printf("售票员 leave\n");
    signal(sig,SIG_DFL);
    raise(sig);
    return;
}


void go(int sig){
    printf("let's go\n");
    return;
}

void stop(int sig){
    printf("stop the bus\n");
    return;
}

void leave(int sig){
    printf("到达终点\n");
    kill(pid,SIGUSR1);
    return;
}



int main(int argc,const char*  argv[]){

    pid = fork();
    if(pid < 0){
        perror("fork err");
        return -1;
    }else if(pid == 0){//售票员
        signal(SIGUSR2,SIG_IGN);//忽略信号
        signal(SIGTSTP,SIG_IGN);//忽略信号

        signal(SIGINT,signal_go);//开车
        signal(SIGQUIT,signal_quit);//停车
        signal(SIGUSR1,signal_leave);//下车
        while(1){
            pause();
        }
 
        
    }else{//司机
        signal(SIGINT,SIG_IGN);//忽略信号
        signal(SIGQUIT,SIG_IGN);//忽略信号
        
        signal(SIGUSR1,go);//开车
        signal(SIGUSR2,stop);//停车
        signal(SIGTSTP,leave);//终点

        wait(NULL);//回收子进程
        printf("司机 leave\n");
    }


    return 0;
}